{extend name="layout" /}

{block name="title"}
<title>表单配置 - thinkPHP极速后台开发</title>
<meta name="title" content="表单配置 - thinkPHP极速后台开发">
<meta name="keywords" content="表单配置,php,后台开发包，thinkphp、easyadmin、admin,easy,thinkeasyadmin">
<meta name="description" content="表单配置,配置添加编辑页面;easyadmin灵活可定制的thinkphp的后台开发工具包,助你快速开发后台">
{/block}

{block name="main"}

<fieldset class="layui-elem-field" id="config">
    <legend>表单配置</legend>
    <div class="layui-field-box">
        <p>表单的添加页面和编辑页面都是通过本方法配置</p>
        <pre class="php">
#project\app\admin\controller\Category.php

namespace app\admin\controller;

use easyadmin\app\libs\PageForm;
use easyadmin\app\columns\form\FormSelect;
use easyadmin\app\columns\form\FormSwitch;
use easyadmin\app\columns\form\FormText;
use easyadmin\app\columns\form\FormTextarea;
use easyadmin\app\columns\form\FormUpload;

class Category extends \easyadmin\controller\Admin
{

    /**
     * 配置表单
     * @param PageForm $page
     */
    protected function configFormField(PageForm $page)
    {
        $page
            ->addField('parent_id', '上级分类', FormSelect::class, [
                'table' => 'category',
                'pk' => 'id',//使用查询,的主键
                'property' => 'name',//查询显示字段
            ])
            ->addField('name', '分类名称', FormText::class)
            ->addField('icon', '分类图标', FormUpload::class)
            ->addField('intro', '分类简介', FormTextarea::class)
            ->addField('is_del', '是否删除', FormSwitch::class);

        if ($this->getFormType() == 'edit') {
            //编辑页面特有的字段
            $page->addField('edit_field', '名称', FormText::class);
        }else{
            //添加页面特有的字段
            $page->addField('add_field', '名称', FormText::class);
        }

    }
}

</pre>
        <blockquote class="layui-elem-quote">
            区分添加页面和编辑页面 使用<code>$this->getFormType()</code>即可 <br>
            <b>add: </b>添加页面 <br>
            <b>edit: </b>编辑页面
        </blockquote>


        <fieldset class="layui-elem-field layui-field-title" id="event">
            <legend>表单页面的钩子</legend>
            <div class="layui-field-box">
                <pre class="php">
#project\app\admin\controller\Category.php

namespace app\admin\controller;

use easyadmin\app\columns\lists\ListImage;
use easyadmin\app\libs\ListField;

class Category extends \easyadmin\controller\Admin
{

    //接收参数之后执行, post 接收到参数以后就调用
    protected function requestAfter($data): array
    {
        return $data;
    }

    //写入之前执行, 调用 insert 写入方法之前调用
    protected function insertBefore($data): array
    {
        return $data;
    }

    //写入之后执行,调用 insert 写入方法之后调用
    protected function insertAfter($data): array
    {
        return $data;
    }

    //更新之前执行, 调用 update 更新方法之前调用
    protected function updateBefore($data): array
    {
        return $data;
    }

    //更新之后执行, 调用 update 更新方法之后调用
    protected function updateAfter($data): array
    {
        return $data;
    }

    //添加和更新 数据验证
    // 在 requestAfter 之后 insertBefore updateBefore 之前执行
    protected function verifyData($data): array
    {
        return $data;
    }

}
        </pre>
                <div><b>写入 执行顺序为:</b></div>
                <p>
                    <span class="layui-badge layui-bg-gray">POST接收</span>→
                    <code>requestAfter</code>→
                    <code>verifyData</code>→
                    <code>insertBefore</code>→
                    <span class="layui-badge layui-bg-gray">mysql写入</span>→
                    <code>insertAfter</code>
                    <span class="layui-badge layui-bg-gray">返回结果</span>
                </p>
                <div><b> 更新 执行顺序为:</b></div>
                <p>
                    <span class="layui-badge layui-bg-gray">POST接收</span>→
                    <code>requestAfter</code>→
                    <code>verifyData</code>→
                    <code>updateBefore</code>→
                    <span class="layui-badge layui-bg-gray">mysql更新</span>→
                    <code>updateAfter</code>
                    <span class="layui-badge layui-bg-gray">返回结果</span>
                </p>
                <p>
                    requestAfter verifyData insertBefore updateBefore
                    没有特别的明显的边界;都可用于<code>表单验证 默认数据处理等</code>,可选一个喜欢的方法调用即可;
                </p>
                <p>为什么要写这么几个方法,只是为了程序中语义可能更友好;</p>

            </div>
        </fieldset>


    </div>
</fieldset>


{/block}
